package com.wx.houserent.service;

import com.wx.houserent.domain.House;

/**
 * ClassName:HouseService
 * Package :com.wx.houserent.service
 * Description :
 * 业务处理类
 *
 * @Author : coder_mu
 * @Create : 2023/5/31 - 13:48
 */
public class HouseService {
    private House[] houses;//房屋数组，用于存储房屋对象

    //构造器
    public HouseService(int size) {
        this.houses = new House[size];//在初始化对象时就将房屋数组大小确定
        houses[0] = new House(1, "jack1", "112", "海淀区", 2000, "未出租");
        houses[1] = new House(2, "jack2", "112", "海淀区", 2000, "未出租");
        houses[2] = new House(3, "jack3", "112", "海淀区", 2000, "未出租");
        houses[3] = new House(4, "jack4", "112", "海淀区", 2000, "未出租");
    }

    //list方法，返回houses
    public House[] list() {
        return houses;
    }

    //add方法，添加房屋信息,返回布尔值，说明是否添加成功
    public boolean add(House house) {
        //先判断是否可以继续添加
        if (houses[houses.length - 1] != null) {//如果数组最后一位不是空，说明数组被占满了，不能继续添加
            System.out.println("数组已满，不能继续添加");
            return false;//返回添加失败
        }
        for (int i = 0; i < houses.length; i++) {
            if (houses[i] == null) {//循环遍历数组，如果遍历到为空的，就把房屋添加到此位
                houses[i] = house;
                if (houses[0] == null) {
                    house.setId(1);

                } else {
                    //判断下标i，如果为0的话，仍然用之前的赋值方式会出现下标越界的报错
                    if (i > 0) {
                        house.setId(houses[i - 1].getId() + 1);
                    } else if (i == 0) {
                        house.setId(1);//默认第一个房屋id设置为1
                    }
                }//同时系统给定房屋id为前一位房屋id加1}
                i = houses.length;//为了不重复添加，直接修改循环变量i的值，然后下次循环会直接退出
                return true;//添加成功
            }
        }
        return true;
    }

    //删除房屋信息
    public boolean del(int delId) {
        //先判断数组是否为空，如果为空就直接返回删除失败了
        if (houses[0] == null) {
            return false;
        }

        //先找到要删除的房屋下标,先判断数组满不满 1.不满 2.满了
        for (int i = 0; i < houses.length; i++) {
            if (houses[i] == null) {//找到第一个为空的下标位置
                for (int j = 0; j < houses.length; j++) {
                    if (houses[j].getId() == delId) {//找到用户想要删除的房屋
                        for (int i1 = j; i1 < houses.length - 1; i1++) {//循环遍历进行覆盖
                            houses[i1] = houses[i1 + 1];//将i后面的房屋向前移动覆盖
                        }
                        return true;
                    }
                }
                return false;//如果没有找到用户想要删除的，返回删除失败
            } else if (houses[houses.length - 1] != null) {
                for (int j = 0; j < houses.length; j++) {
                    if (houses[j].getId() == delId) {//找到了用户想要删除的房屋
                        for (int i1 = j; i1 < houses.length - 1; i1++) {
                            houses[i1] = houses[i1 + 1];//将i后面的房屋向前移动覆盖
                        }
                        houses[houses.length - 1] = null;//将倒数第一位置为空，下一次如果想要删除就会进行上面的 不满 循环删除了
                        return true;//删除成功
                    }
                }
            }
        }
        return false;//删除失败
    }

    //根据id查找房屋信息
    public House findById(int findId) {
        for (int i = 0; i < houses.length; i++) {
            if (houses[i].getId() == findId) {
                return houses[i];
            }
        }
        return null;
    }
}